var Form = {
	bind: function( id, options )
	{
		if ( !options ) options = {};

		if ( $('#' + id + ' input[type=submit]').length == 0 )
			$('#' + id).append('<input type="submit" style="position:absolute; left: -1000px; top: -1000px; width: 20px; height: 20px;"/>');

		$('#' + id).submit(function() {
			if ( options.init ) options.init();
			if ( options.validate ) if ( !options.validate() ) return false;

			$('#' + id + ' .progress').show();

			var action = $(this).attr('action');
			if ( !action ) action = document.location.href;

			options.reset ? options.reset() : Form.resetError(id);
			$('#' + id + ' .success').hide();

			$.post( action, $(this).serialize(), function( r ) {
				$('#' + id + ' .progress').hide();
				if ( !r ) return;

				if ( r.error )
				{
					if ( options.error )
						options.error(r);
					else
						Form.showError(id, r.error);

				}
				else if ( options.success )
					options.success( r );
				else Form.showSuccess(id);
			}, 'json' )

			return false;
		});
	},
	
	showSuccess: function(id)
	{
		$('#' + id + ' .success').show();
	},

	showError: function( id, message )
	{
		if ( $('#' + id + ' .error').length == 0 )
			$('#' + id).append('<div class="error"></div>');

		$('#' + id + ' .error').text(message).fadeIn(250);
	},

	resetError: function( id )
	{
		$('#' + id + ' .error').hide();
	},

	dialog: function(url, options)
	{
		Dialog.create('dialog');

		$.get(url, function(r) {
			Dialog.setHtml('dialog', r);
			Form.bind($('#dialog form').attr('id'), options);
			if ( typeof options.callback != 'undefined' ) options.callback(r);
		});
	}
}